#include <bits/stdc++.h>

#define in read()
#define fi first
#define se second
#define pb push_back
#define rep(i, x, y) for(int i = (x); i <= (y); i++)
#define per(i, x, y) for(int i = (x); i >= (y); i--)

using namespace std;

typedef long long ll;
typedef double db;
typedef vector < int > vec;
typedef pair < int , int > pii;

int read() {
    int x = 0; bool f = 0; char ch = getchar(); while(!isdigit(ch)) f |= ch == '-',ch = getchar();
    while(isdigit(ch)) x = x * 10 + (ch ^ 48),ch = getchar(); return f ? -x : x;
}

const int N = 1010;
const int mod = 1e9 + 7;

int f[N][N], k, pa, pb, tot, A, B, C;
int upd(int x) { return x + (x >> 31 & mod); }
ll qp(ll x, int t) { ll res = 1; for(; t; t >>= 1, x = x * x % mod) if(t & 1) res = res * x % mod; return res; }

int main() {
#ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
#endif
	k = in, pa = in, pb = in; C = 1ll * pa * qp(pb, mod - 2) % mod; tot = upd(pa + pb - mod); tot = qp(tot, mod - 2);
	A = 1ll * pa * tot % mod; B = 1ll * pb * tot % mod;
	per(i, k, 1) {
		per(j, k, 0) {
			if(i + j >= k) f[i][j] = (i + j + C) % mod;
			else f[i][j] = upd(1ll * A * f[i + 1][j] % mod + 1ll * B * f[i][j + i] % mod - mod);
		}
	}
	printf("%d\n", f[1][0]);
}
